#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <functional>
#include <vector>

using task_t = std::function<void()>;
std::vector<task_t> Tasks;

void SigHandler(int sigid)
{
    int n = Tasks.size();
    std::cout << "pid: " << getpid() << ", 获得信号: " << sigid << ", ";
    Tasks[rand() % n]();
    alarm(1);
}

int main()
{
    srand((unsigned int)time(nullptr));
    signal(SIGALRM, SigHandler);

    for(int i = 0; i < 32; i++)
    {
        Tasks.push_back([i](){
            std::cout << "正在执行任务: [" << i << "]" << std::endl;
        });
    }

    alarm(1);
    while(true)
    {
        pause();
        // std::cout << "......" << std::endl;
        // sleep(1);
    }
    return 0;
}

// void SigHandler(int sigid)
// {
//     std::cout << "获得信号: " << sigid << std::endl;
//     exit(sigid);
// }

// int main()
// {
//     for(int i = 1; i < 32; i++)
//         signal(i, SigHandler);
    
//     alarm(1);
//     int cnt = 0;
//     while(true)
//     {
//         std::cout << "count: " << cnt++ << std::endl;
//     }

//     return 0;
// }